package models

import (
	"github.com/guregu/null"
	"gorm.io/gorm"
)

type RecommendArticleVo struct {
	Id             int    `json:"id"`
	ArticleTitle   string `json:"articleTitle"`
	ArticleCover   string `json:"articleCover"`
	ArticleContent string `json:"articleContent"`
	CreateTime     MyTime `json:"createTime"`
}
type RelatedArticleVo struct {
	Id           int    `json:"id"`
	ArticleTitle string `json:"articleTitle"`
	ArticleCover string `json:"articleCover"`
	CreateTime   MyTime `json:"createTime"`
}
type TimeLineVo struct {
	Id             int    `json:"id"`
	ArticleTitle   string `json:"articleTitle"`
	ArticleCover   string `json:"articleCover"`
	ArticleContent string `json:"articleContent"`
	CreateTime     MyTime `json:"createTime"`
}
type ArticleListVo struct {
	gorm.Model
	Id           int      `gorm:"column:id" json:"id"`
	CategoryId   int      `gorm:"column:category_id" json:"categoryId"`
	UserId       int      `gorm:"column:user_id" json:"userId"`
	UserName     string   `gorm:"column:username" json:"userName"`
	ArticleType  int      `gorm:"column:article_type" json:"articleType"`
	CategoryName string   `gorm:"column:category_name" json:"categoryName"`
	TagsName     []string `gorm:"-" json:"tagsName"`
	ArticleTitle string   `gorm:"column:article_title" json:"articleTitle"`
	ArticleCover string   `gorm:"column:article_cover" json:"articleCover"`
	IsTop        int      `gorm:"column:is_top" json:"isTop"`
	Status       int      `gorm:"column:status" json:"status"`
	VisitCount   int      `gorm:"column:visit_count" json:"visitCount"`
	CreateTime   MyTime   `gorm:"column:created_at" json:"createTime"`
}
type ArticleDto struct {
	gorm.Model
	Id             int    `gorm:"column:id" json:"id"`
	CategoryId     int    `gorm:"column:category_id" json:"categoryId"`
	TagId          []int  `gorm:"-" json:"tagId"`
	ArticleCover   string `gorm:"column:article_cover" json:"articleCover"`
	ArticleTitle   string `gorm:"column:article_title" json:"articleTitle"`
	ArticleType    int    `gorm:"column:article_type" json:"articleType"`
	ArticleContent string `gorm:"column:article_content" json:"articleContent"`
	IsTop          int    `gorm:"column:is_top" json:"isTop"`
	Status         int    `gorm:"column:status" json:"status"`
}
type ArticleVo struct {
	gorm.Model
	Id             int      `gorm:"column:id" json:"id"`
	UserId         int      `gorm:"column:user_id" json:"userId"`
	CategoryId     int      `gorm:"column:category_id" json:"categoryId"`
	ArticleCover   string   `gorm:"column:article_cover" json:"articleCover"`
	ArticleTitle   string   `gorm:"column:article_title" json:"articleTitle"`
	ArticleType    int      `gorm:"column:article_type" json:"articleType"`
	ArticleContent string   `gorm:"column:article_content" json:"articleContent"`
	CommentCount   int      `gorm:"-" json:"commentCount"`
	LikeCount      int      `gorm:"-" json:"likeCount"`
	FavoriteCount  int      `gorm:"-" json:"favoriteCount"`
	VisitCount     int      `gorm:"column:visit_count" json:"visitCount"`
	CreateTime     MyTime   `gorm:"column:created_at" json:"createTime"`
	UpdateTime     MyTime   `gorm:"column:updated_at" json:"updateTime"`
	CategoryName   string   `gorm:"column:category_name" json:"categoryName"`
	Tags           []string `gorm:"-" json:"tags"`
}
type ArticleDetailVo struct {
	Id               int     `gorm:"column:id" json:"id"`
	UserId           int     `gorm:"column:user_id" json:"userId"`
	CategoryName     string  `gorm:"column:category_name" json:"categoryName"`
	CategoryId       int     `gorm:"column:category_id" json:"categoryId"`
	Tags             []TagVo `gorm:"-" json:"tags"`
	ArticleCover     string  `gorm:"column:article_cover" json:"articleCover"`
	ArticleTitle     string  `gorm:"column:article_title" json:"articleTitle"`
	ArticleType      int     `gorm:"column:article_type" json:"articleType"`
	ArticleContent   string  `gorm:"column:article_content" json:"articleContent"`
	IsTop            int     `gorm:"column:is_top" json:"isTop"`
	VisitCount       int     `gorm:"column:visit_count" json:"visitCount"`
	CommontCount     int     `gorm:"-" json:"commentCount"`
	LikeCount        int     `gorm:"-" json:"likeCount"`
	FavoriteCount    int     `gorm:"-" json:"favoriteCount"`
	PreArticleId     int     `gorm:"-" json:"preArticleId"`
	NextArticleId    int     `gorm:"-" json:"nextArticleId"`
	PreArticleTitle  string  `gorm:"-" json:"preArticleTitle"`
	NextArticleTitle string  `gorm:"-" json:"nextArticleTitle"`
	CreateTime       MyTime  `gorm:"column:created_at" json:"createTime"`
	UpdateTime       MyTime  `gorm:"column:updated_at" json:"updateTime"`
}
type Article struct {
	gorm.Model
	Id             int    `gorm:"column:id" json:"id"`
	UserId         int    `gorm:"column:user_id" json:"userId"`
	CategoryId     int    `gorm:"column:category_id" json:"categoryId"`
	ArticleCover   string `gorm:"column:article_cover" json:"articleCover"`
	ArticleTitle   string `gorm:"column:article_title" json:"articleTitle"`
	ArticleType    int    `gorm:"column:article_type" json:"articleType"`
	ArticleContent string `gorm:"column:article_content" json:"articleContent"`
	IsTop          int    `gorm:"column:is_top" json:"isTop"`
	Status         int    `gorm:"column:status" json:"status"`
	VisitCount     int    `gorm:"column:visit_count" json:"visitCount"`
	IsDeleted      int    `gorm:"column:is_deleted" json:"isDeleted"`
}
type InitSearchTitleVo struct {
	Id           int    `json:"id"`
	CategoryName string `json:"categoryName"`
	VisitCount   int    `json:"visitCount"`
	ArticleTitle string `json:"articleTitle"`
}
type SearchArticleByContentVo struct {
	Id             int    `json:"id"`
	ArticleTitle   string `json:"articleTitle"`
	ArticleContent string `json:"articleContent"`
	VisitCount     int    `json:"visitCount"`
	CategoryName   string `json:"categoryName"`
}
type SearchArticleDto struct {
	CategoryId   int      `gorm:"column:category_id" json:"categoryId"`
	ArticleTitle string   `gorm:"column:article_title" json:"articleTitle"`
	Status       null.Int `gorm:"column:status" json:"status"`
	IsTop        null.Int `gorm:"column:is_top" json:"isTop"`
}
type ArticleEs struct {
	Id             int      `gorm:"column:id" json:"id"`
	CategoryId     int      `gorm:"column:category_id" json:"categoryId"`
	UserId         int      `gorm:"column:user_id" json:"userId"`
	UserName       string   `gorm:"column:username" json:"userName"`
	ArticleType    int      `gorm:"column:article_type" json:"articleType"`
	CategoryName   string   `gorm:"column:category_name" json:"categoryName"`
	TagsName       []string `gorm:"-" json:"tagsName"`
	ArticleTitle   string   `gorm:"column:article_title" json:"articleTitle"`
	ArticleCover   string   `gorm:"column:article_cover" json:"articleCover"`
	ArticleContent string   `json:"articleContent"`
	IsTop          int      `gorm:"column:is_top" json:"isTop"`
	Status         int      `gorm:"column:status" json:"status"`
	VisitCount     int      `gorm:"column:visit_count" json:"visitCount"`
	CreateTime     MyTime   `gorm:"column:created_at" json:"createTime"`
}
type HotArticleVo struct {
	gorm.Model
	Id           int    `gorm:"column:id" json:"id"`
	ArticleTitle string `gorm:"column:article_title" json:"articleTitle"`
	VisitCount   int    `gorm:"column:visit_count" json:"visitCount"`
}

func (table *HotArticleVo) TableName() string {
	return "t_article"
}
func (table *Article) TableName() string {
	return "t_article"
}
func (table *ArticleVo) TableName() string {
	return "t_article"
}
func (table *ArticleListVo) TableName() string {
	return "t_article"
}
func (table *ArticleDto) TableName() string {
	return "t_article"
}
